<?php
//发送邮件
function think_send_mail($to, $name, $subject = '', $body = '', $attachment = null){
	$config = C('EMAIL');
	vendor('PHPMailer.class#phpmailer'); //从PHPMailer目录导class.phpmailer.php类文件
	$mail             = new PHPMailer(); //PHPMailer对象
	$mail->CharSet    = 'UTF-8'; //设定邮件编码，默认ISO-8859-1，如果发中文此项必须设置，否则乱码
	$mail->IsSMTP();  // 设定使用SMTP服务
	$mail->SMTPDebug  = 0;                     // 关闭SMTP调试功能 
											   // 1 = errors and messages
											   // 2 = messages only
	$mail->SMTPAuth   = true;                  // 启用 SMTP 验证功能
	#!!!!!这一行最好别写   
	#$mail->SMTPSecure = 'ssl';                 // 使用安全协议 //这个是出现错误的原因，如果你是windows就很容易出错  不过也有不出错的情况 我这次用就出错了
	$mail->Host       = $config['SMTP_HOST'];  // SMTP 服务器
	$mail->Port       = $config['SMTP_PORT'];  // SMTP服务器的端口号
	$mail->Username   = $config['SMTP_USER'];  // SMTP服务器用户名
	$mail->Password   = $config['SMTP_PASS'];  // SMTP服务器密码
	$mail->SetFrom($config['FROM_EMAIL'], $config['FROM_NAME']);
	$replyEmail       = $config['REPLY_EMAIL']?$config['REPLY_EMAIL']:$config['FROM_EMAIL'];
	$replyName        = $config['REPLY_NAME']?$config['REPLY_NAME']:$config['FROM_NAME'];
	$mail->AddReplyTo($replyEmail, $replyName);
	$mail->Subject    = $subject;
	$mail->MsgHTML($body);
	$mail->AddAddress($to, $name);
	if(is_array($attachment)){ // 添加附件
		foreach ($attachment as $file){
			is_file($file) && $mail->AddAttachment($file);
		}
	}
	return $mail->Send() ? true : $mail->ErrorInfo;
}
/**********************************************************
 *     VERSION:2013-04-11 by tr
 *		函数：		根据自定规则，获取指定字串标签位对应的内容
 *		参数：		$str：				待匹配字串		字串类型
 *						$rule：				自定义规则	
 *						$label：				标签				数组或字串
 *						$label_x：			变数标签		字串，替代任意字符的标签
 *						$must_only_one	匹配次数只能为一次，否则报错，并返回false值
 *		返回值：	各标签匹配结果组成的数组。详情见函数 return 语句前的判断。
 *
 ***********************************************************/
//正则匹配
function easy_match_all($str,$rule,$label,$label_x="[变数]", $must_only_one=0)
{
	if( is_array($label) )
	{
		$oarr			= array();
		foreach( $label as $k=>$v )
		{
			$trule		= explode($v,$rule);
			$toffset		= strlen($trule[0]);
			$oarr[$k]	= $toffset;
		}

		asort($oarr);						//排序并保持索引
		$oarr	= array_keys($oarr);	//依序获取数组的键，得到的数组，key 为标签在规则里的顺序，value为标签在标签数组中的顺序
	}
	else
	{
		$label		= array($label);
		$oarr		= array("0"=>"0");
	}

	$rule	= str_replace( $label, "_ga_lab",$rule);				//转化所有采集标签
	$rule	= str_replace( $label_x, "_ga_x",$rule );				//转化变数标签
	$rule	= Addcslashes($rule,'^$().[]|*?+-\{}\'"/');			//转义
	$rule	= str_replace( array( "\n","\t","\r"," " ), "\\s+", $rule );					//替换空字符
	$rule	= str_replace( array("_ga_lab","_ga_x"), array("(.*)",".*"), $rule ); //转化
	$rule	= "/.*".$rule.".*/isU";

	@preg_match_all( $rule, $str, $match);						//匹配操作
	unset( $match[0] );													//第一项为全局匹配结果，不需要，扔掉。

	if($must_only_one && count($match[1])>1)								//如果只能有唯一一次匹配
	{
		die('more then one');
		return false;
	}

	$ms	= count($match);

	$return	= array();

	for( $i=1; $i<=$ms; $i++ )
	{
		$lo	= $oarr[$i-1];		//获得标签的顺序
		$mm	= $match[$i];

		$return[$lo] = $mm;
	}
	return $return;
}
//用curl获取
function curl_url_get_contents($durl){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $durl);
   curl_setopt($ch, CURLOPT_TIMEOUT, 10);
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $header = array(
		"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
		"Accept-Encoding:gzip, deflate",
		"Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3",
		"Cache-Control:max-age=0",
		"Connection:keep-alive",
		"Cookie:x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; otherx=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26_ato%3D0; cq=ccp%3D1; mall_fp_ab=2012a; mpp=t%3D0%26m%3D%26h%3D0%26l%3D0; t=670e0094054d928c7abf3cfdce131719; tracknick=; cookie2=".md5(time())."; _tb_token_=".time(),
		"User-Agent:Mozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0",
   );
   curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
   curl_setopt($ch,CURLOPT_ENCODING ,'gzip');
   $r = curl_exec($ch);
   curl_close($ch);
   return $r;
}

//远程抓取网站内容
function url_get_contents($url){
	if(!$url) return '';
	$file = curl_url_get_contents($url);
	return $file;
}

/** 提取数组中值为键值
 *
 * 比如 :
 * $array=array(0=>array('a'=>1,'b'=>2),1=>array('a'=>2,'b'=>3));
 * $arr = array_valtokey($array,'a'); //$arr 值为 array(1=>array('a'=>1,'b'=>2),2=>array('a'=>2,'b'=>3))
 * $arr = array_valtokey($array,'a','b');//$arr值为 array(1=>2,2=>3);
 *
 * @param	array	$array 目标数组
 * @param	string	$key 键名
 * @param	string	$val 值名
 * @return	array
 */
function array_valtokey($array,$key = 0,$val = null)
{
	$arr = array();
	if(!$key) return $array;
	foreach($array as $value)
	{
		if(is_string($val))
		{
			$arr[$value[$key]] = $value[$val];
		}
		else
		{
			$arr[$value[$key]] = $value;
		}
	}
	return $arr;
}

/** 显示杂项
 *
 *
 * @param	string	$item	杂项名称
 * @param	string	$val	杂项值
 * @param	boolean	$return	是否返回
 * @return	string
 */
function show_defined_text($arr, $key=null, $return=false)
{
	if($key === null) return $arr;
	$re_str = isset($arr[$key]) ? $arr[$key]:$key;
	if($return) return $re_str;
	echo $re_str;
}

/** 由数组生成checkbox
 */
function show_arr_radio($arr, $input_name, $checked,$return=false,$format = '<label>%s</label>'){
	$str = '';
	foreach($arr as $k=>$v){
		$re_str = '<input type="radio" name="'.$input_name.'" value="'.$k.'"';
		if("$checked"==="$k") $re_str .= ' checked ';
		$re_str .= '>';
		$re_str .= $v;
		$re_str = sprintf($format,$re_str);
		$str .= $re_str;
	}
	if($return) return $str;
	echo $str;
}

function dateformat($format,$date){
	return date($format,strtotime($date));
}